import axios from 'axios';
import apiList from './apiList'
import router from '@/router/index.js'
import {
  Message
} from 'element-ui';

import {
  API_URL
} from '@/env'
import {
  Loading
} from 'element-ui'

// 创建axios实例
const httpService = axios.create({
  baseURL: API_URL, // 需自定义
  // 请求超时时间
  timeout: 30000
});


// request拦截器
httpService.interceptors.request.use(
  config => {
    // 根据条件加入token-安全携带
    if (true) { // 需自定义
      // 让每个请求携带token
      config.headers['token'] = localStorage.getItem('token');
      // config.headers['Content-Type'] = "application/json; charset=utf-8";
    }
    return config;
  },
  error => {
    // 请求错误处理
    Promise.reject(error);
  }
)

// respone拦截器
httpService.interceptors.response.use(
  response => {
    // 统一处理状态
    if (response.status != 200) { // 需自定义
      //   // 返回异常
      return Promise.reject({
        status: response.status,
        message: response.statusText
      });
    } else {
      return response.data;
    }
  },
  // 处理处理
  error => {
    if (error && error.response) {
      switch (error.response.status) {
        case 400:
          error.message = '错误请求';
          break;
        case 401:
          error.message = error.response.data.msg;
          router.replace('/user_login');
          break;
        case 403:
          error.message = '拒绝访问';
          break;
        case 404:
          error.message = '请求错误,未找到该资源';
          break;
        case 405:
          error.message = '请求方法未允许';
          break;
        case 408:
          error.message = '请求超时';
          break;
        case 500:
          error.message = '服务器端出错';
          break;
        case 501:
          error.message = '网络未实现';
          break;
        case 502:
          error.message = '网络错误';
          break;
        case 503:
          error.message = '服务不可用';
          break;
        case 504:
          error.message = '网络超时';
          break;
        case 505:
          error.message = 'http版本不支持该请求';
          break;
        default:
          error.message = `未知错误${error.response.status}`;
      }
    } else {
      error.message = "当前无网络，请刷新网络后重试";
    }

    Message(error.message)
    return Promise.reject(error);
  }
)

/*网络请求部分*/

export default function api(url, params = {}) {

  // showLoaing();

  let api = getApiObj(url);
  if (api.auth) {
    let token = localStorage.getItem('token');
    // if (!token) {
    //   throw ('暂未登录,已阻止此次API请求~');
    // }
  }
  return new Promise((resolve, reject) => {
    httpService({
      url: api.url,
      method: api.method,
      data: params
    }).then(response => {
      // hideLoading();
      resolve(response);
    }).catch(error => {
      // hideLoading();
      reject(error);
    });
  });
}


function getApiObj(url) {
  let apiArray = url.split(".");
  let api = apiList;
  apiArray.forEach(v => {
    api = api[v];
  });
  return api;
}
// 加载中...
// let loading;
// let loadingCount = 0;

// function start() {
//   loading = Loading.service({
//     lock: true,
//     text: '加载中',
//     background: 'rgba(255,255,255,0.5)'
//   })
// };

// function end() {
//   loading.close();
// }

// function showLoaing() {
//   if (loadingCount == 0) {
//     start();
//   };
//   loadingCount++
// };

// function hideLoading() {
//   loadingCount--;
//   if (loadingCount == 0) {
//     end()
//   }
// }
